<?php
/**
 * Created by IntelliJ IDEA.
 * User: Adam
 * Date: 2010-02-17
 * Time: 20:17:04
 */

class Default_Model_Points extends Zend_Db_Table_Abstract {
	protected $_name = 'points';
	protected $_primary = array('id');
	protected $_cols = array(
		'id',
		'users_id',
		'timestamp',
		'long',
		'lat',
		'alt'
	);

	/**
	 * Dodaje punkt do bazy dla danego użyszkodnika
	 *
	 * @param  $user ID użytkownika
	 * @param  $lat Szerokość geograficzna
	 * @param  $long Długość geograficzna
	 * @param  $alt Wysokość n.p.m.
	 * @param  $time Czas (timestamp)
	 * @return Boolean Powodzenie
	 */
	public function addPoint($user, $lat, $long, $alt, $time) {
		if (!Zend_Validate::is($user, 'Digits') || !Zend_Validate::is($lat, 'Float') || !Zend_Validate::is($long, 'Float')
				|| !Zend_Validate::is($alt, 'Float')|| !Zend_Validate::is($time, 'Int')) {
			return false;
		}

		try {
			return $this->insert(array(
				'users_id' => intval($user),
				'timestamp' => intval($time),
				'long' => floatval($long),
				'lat' => floatval($lat),
				'alt' => floatval($alt)
			));
		} catch (Zend_Db_Statement_Exception $e) {
			Zend_Registry::get('Zend_Log')->crit('Adding poing "' . $long . '#' . $lat . '" for user ID "' . $user . '" failed: ' . $e->getMessage());
			return false;
		}
	}

	/**
	 * Pobiera wszystkie punkty danego użytkownika w podanym przedziale czasowym
	 *
	 * @param  $user ID Użytkownika
	 * @param  $from Timestamp od
	 * @param  $to Timestamp do
	 * @return array
	 */
	public function getPoints($user, $from, $to) {
		if (!is_null($user) && (!is_numeric($user) || $user <= 0)) {
			return false;
		}

		if (!is_numeric($from) || $from <= 0) {
			return false;
		}
		if (!is_numeric($to) || $to <= 0) {
			return false;
		}

		return $this->select()
			->from($this->_name, $this->_cols)
			->where('"users_id" = ?', intval($user))
			->where('"timestamp" > ?', intval($from))
			->where('"timestamp" < ?', intval($to))
			->query()->fetchAll();
	}
}